package com.stu.day05;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Date是线程安全的(本身),可变部分不是线程安全的,如setTime(long time)方法
 * 注意Date类的起始时间是1970年,月份是0~11
 * 所以设置年份时要-1970,设置月份时要-1,
 * 如date.setYear(2025-1970),date.setMonth(1-1)
 * 获取月份时要+1,如date.getMonth()+1;
 *
 * @author zy
 * @date 2025/1/27 14:26
 */
public class DateDemo {
    public static void main(String[] args) {
        Date date1 = new Date();
        System.out.println(date1);  // Mon Jan 27 15:00:46 CST 2025(此格式输出当前系统时间)

        Date date2 = new Date(123123);  // 可根据毫秒数设置日期
        long timeInMillis = date2.getTime();
        System.out.println(timeInMillis);  // 输出从1970年1月1日以来的毫秒数

        System.out.println(date1.before(date2));  // 判断date1是否在date2之前:false
        int result = date1.compareTo(date2);
        System.out.println(result);  // 输出-1,0或1, date1比date2晚,所以返回1

        //Date类型是不能够直接进行运算的
        //练习: 2天之后的此刻的Date对象
        Date twoAfter = new Date(new Date().getTime()+2L*24*60*60*1000);
        System.out.println("两天之后:"+twoAfter);  // 两天之后:Wed Jan 29 16:35:21 CST 2025

        /**
         * 创建SimpleDateFormat类的对象时,其参数表示日期的格式
         * format方法以Date为参数返回一个字符串对象
         * parse方法以为字符串参数返回一个Date对象
         */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  // 参数表示格式
        String dateStr = sdf.format(date1);
        System.out.println(dateStr);  // 通过Date类->字符串 格式化输出

        String datestr2 = "2025/01/28";  // 必须和SimpleDateFormat的参数格式匹配,都是/或-,或其他的
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
        try {
            Date date3 = sdf2.parse(datestr2);  // 字符串->Date类
            System.out.println(date3);
            System.out.println(sdf2.format(date3));

        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

    }
}
